<?php
// +----------------------------------------------------------------------
// | Fanwe 方维p2p借贷系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011 http://www.fanwe.com All rights reserved.
// +----------------------------------------------------------------------
// | Author: 云淡风轻(88522820@qq.com)
// +----------------------------------------------------------------------
namespace Home\Model;
use \Think\Model;
class ArticleCateModel   extends \Think\Model {
    public function toTree($list=null, $pk='id',$pid = 'pid',$child = '_child')
    {
        if(null === $list) {
            // 默认直接取查询返回的结果集合
            $list   =   &$this->dataList;
        }
        // 创建Tree
        $tree = array();
        if(is_array($list)) {
            // 创建基于主键的数组引用
            $refer = array();

            foreach ($list as $key => $data) {
                $_key = is_object($data)?$data->$pk:$data[$pk];
                $refer[$_key] =& $list[$key];
            }
            foreach ($list as $key => $data) {
                // 判断是否存在parent
                $parentId = is_object($data)?$data->$pid:$data[$pid];
                $is_exist_pid = false;
                foreach($refer as $k=>$v)
                {
                    if($parentId==$k)
                    {
                        $is_exist_pid = true;
                        break;
                    }
                }
                if ($is_exist_pid) {
                    if (isset($refer[$parentId])) {
                        $parent =& $refer[$parentId];
                        $parent[$child][] =& $list[$key];
                    }
                } else {
                    $tree[] =& $list[$key];
                }
            }
        }
        return $tree;
    }


    /**
     * 将格式数组转换为树
     *
     * @param array $list
     * @param integer $level 进行递归时传递用的参数
     */
    private $formatTree; //用于树型数组完成递归格式的全局变量
    private function _toFormatTree($list,$level=0,$title = 'title')
    {
        foreach($list as $key=>$val)
        {
            $tmp_str=str_repeat("&nbsp;&nbsp;",$level*2);
            $tmp_str.="|--";

            $val['level'] = $level;
            $val['title_show'] = $tmp_str.$val[$title];
            if(!array_key_exists('_child',$val))
            {
                array_push($this->formatTree,$val);
            }
            else
            {
                $tmp_ary = $val['_child'];
                unset($val['_child']);
                array_push($this->formatTree,$val);
                $this->_toFormatTree($tmp_ary,$level+1,$title); //进行下一层递归
            }
        }
        return;
    }

    public function toFormatTree($list,$title = 'title')
    {
        $list = $this->toTree($list);
        $this->formatTree = array();
        $this->_toFormatTree($list,0,$title);
        return $this->formatTree;
    }


    //无限递归获取子数据ID集合
    private $childIds;
    private function _getChildIds($pid = '0', $pk_str='id' , $pid_str ='pid')
    {
        $childItem_arr = $this->field('id')->where($pid_str."=".$pid)->findAll();
        if($childItem_arr)
        {
            foreach($childItem_arr as $childItem)
            {
                $this->childIds[] = $childItem[$pk_str];
                $this->_getChildIds($childItem[$pk_str],$pk_str,$pid_str);
            }
        }
    }
    public function getChildIds($pid = '0', $pk_str='id' , $pid_str ='pid')
    {
        $this->childIds = array();
        $this->_getChildIds($pid,$pk_str,$pid_str);
        return $this->childIds;
    }
}
?>